<?php
/**
 * clase para el manejo de archivos y carpetas
 * @author Sifei
 *
 */
class Systemio {
	
	public function __construct(){		
	}
	
	/**
	 * obtiene el contenido del usuario
	 * @param unknown $fileName
	 * @throws Exception
	 */
	public function readFile($fileName){
		try{
			if(!file_exists($fileName))
				throw new Exception("El archivo " . $fileName . " no fue encontrado.");
			$content = file_get_contents($fileName);
			if($content === FALSE)
				throw new Exception("Error al intentar leer el archivo " . $fileName);
			return $content;
		}catch (Exception $ex){
			throw new Exception($ex->getMessage());
		}
	}
	
	/**
	 * guarda la informacion especificada dentro del archivo dado
	 * @param unknown $fileName
	 * @param unknown $data
	 * @throws Exception
	 * @return boolean
	 */
	public function saveFile($fileName,$data){
		try{
			$result = file_put_contents($fileName, $data);
			if($result === FALSE)
				throw new Exception("Error al intentar guardar en el archivo " . $fileName);
			return TRUE;
		}catch (Exception $ex){
			throw new Exception($ex->getMessage());
		}
	}
	
	/**
	 * elimina un archivo dado una ruta
	 * @param unknown $fileName
	 * @throws Exception
	 * @return boolean
	 */
	public function deleteFile($fileName){
		try{
			if(!file_exists($fileName))
				return TRUE;
			$result = @unlink($filename);
			if($result === FALSE)
				throw new Exception("Error al intentar eliminar el archivo " . $fileName);
			return TRUE;
		}catch (Exception $ex){
			throw new Exception($ex->getMessage());
		}
	}
	
	/**
	 * elimina un direcotio
	 * @param unknown $dirName
	 * @throws Exception
	 * @return boolean
	 */
	public function deleteDirectory($dirName){
		try{
			if(!is_dir($dirName))
				throw new Exception("La ruta especificada no es un directorio " . $dirName);
			if(!rmdir($dirName))
				throw new Exception("No se pudo elimar el directorio " . $dirName);			
			return TRUE;
		}catch (Exception $ex){
			throw new Exception($ex->getMessage());
		}
	}
	
	/**
	 * renombre un archivo
	 * @param unknown $fileOld
	 * @param unknown $fileNew
	 * @param boolean $force determina si un arhivo destino existe se debe eliminar
	 * @throws Exception
	 * @return boolean
	 */
	public function renameFile($fileOld,$fileNew,$force=TRUE){
		try{
			if(!file_exists($fileOld))
				throw new Exception("El archivo original no fue encontrado");
			if(file_exists($fileNew) && $force == FALSE)
				throw new Exception("El archivo destino existe y no esta habilitada la bandera de elimiar.");
			elseif(file_exists($fileNew) && $force == TRUE)
				@unlink($fileNew);
			if(rename($fileOld,$fileNew) == FALSE)
				throw new Exception("Error inesperado al renombrar el achivo " . $fileOld . " a " . $fileNew);	
			return TRUE;
		}catch(Exception $ex){
			throw new Exception($ex->getMessage());
		}
	}
	
	/**
	 * renombra un directorio
	 * @param unknown $dirOld
	 * @param unknown $dirNew
	 * @param boolean $force determina si un directorio destino existe se debe eliminar
	 * @throws Exception
	 * @return boolean
	 */
	public function renameDirectory($dirOld,$dirNew,$force=TRUE){
		try{
			if(!is_dir($dirOld))
				throw new Exception("El directorio original no fue encontrado");
			if(is_dir($dirNew) && $force == FALSE)
				throw new Exception("El directorio destino existe y no esta habilitada la bandera de elimiar.");
			elseif(is_dir($dirNew) && $force == TRUE)
                            @rmdir($dirNew);
			if(rename($dirOld,$dirNew) == FALSE)
				throw new Exception("Error inesperado al renombrar el directorio " . $fileOld . " a " . $fileNew);
			return TRUE;
		}catch(Exception $ex){
			throw new Exception($ex->getMessage());
		}
	}
	
	/**
	 * mueve un archivo
	 * @param unknown $fileOld
	 * @param unknown $fileNew
	 * @param boolean $upload determina si el archivo fue subido 
	 * @throws Exception
	 * @return boolean
	 */
	public function moveFile($fileOld,$fileNew,$upload = FALSE){
		try{
			if(!file_exists($fileOld))
				throw new Exception("El archivo original no fue encontrado");
			if(!file_exists($fileNew))
				throw new Exception("El archivo destino no fue encontrado");
			if($upload)
				$r = move_uploaded_file($fileOld, $fileNew);
			else
				$r = rename($fileOld, $fileNew);
			if($r == FALSE)
				throw new Exception("Error inesperado al mover el archivo " . $fileOld);
			return TRUE;
		}catch(Exception $ex){
			throw new Exception($ex->getMessage());
		}
	}
	
	/*public function renameFile($fileName){
		try{
				
		}catch(Exception $ex){
			throw new Exception($ex->getMessage());
		}
	}*/
	
	
}
